package command;

/**
 * 比如编辑器你操作的一个事情比如拷贝
 * undo就是撤销
 *
 * 可以理解就是封装各种各样的动作的。
 *
 * 就是对一个对象或者内容进行操作然后可以还原
 *
 * 复杂的过程可能需要记录干了什么好在undo还原 可以放到责任链里面
 *
 * undo直接恢复责任链里面的内容
 */
abstract class Opt{
    public abstract void doit();
    public abstract void undo();
}

class Message{
    public String str = "";
}


class InsertMessage extends Opt{
    Message c = new Message();
    private String addStr = "admin";
    @Override
    public void doit() {
        c.str+=addStr;
    }

    @Override
    public void undo() {
        c.str = c.str.replace(addStr, "");
    }

    public String getStr(){
        return c.str;
    }
}



public class command {
    public static void main(String []args){
        // 对 Message str 执行一个 insert的命令
        InsertMessage insertMessage = new InsertMessage();
        insertMessage.doit();
        System.out.println(insertMessage.getStr());
        insertMessage.undo();
        System.out.println(insertMessage.getStr());
    }
}
